package com.boot.ys.mybatisplus.script;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

/**
 * 描述 我有一个根目录文件夹C:\Users\DELL\Desktop\发版\测试\1 这个里面有很多的MP4文件 我现在需要做的是，这里面所有的文件前9位数据一样的，
 * 帮我复制到另外一个C:\Users\DELL\Desktop\发版\测试\2 这个文件目录下，如果前9位一样的文件有一个或者多个，
 * 就帮我新建一个文件夹，文件夹名称为其中一个文件的名称就行，然后复制文件放在这里面下去
 *
 * @Author yangsheng
 * @Date 2024/10/22 19:54
 */
public class CopyMP4Files {
    public static void main(String[] args) {

        // 源文件夹和目标文件夹路径
        String sourceFolderPath = "E:\\BaiduNetdiskDownload\\all\\视频加上文字水印\\小程序2.0";
        String destinationFolderPath = "E:\\BaiduNetdiskDownload\\all\\视频加上文字水印\\微信小程序2.0";

        // 创建目标文件夹如果不存在
        File destinationFolder = new File(destinationFolderPath);
        if (!destinationFolder.exists()) {
            destinationFolder.mkdirs();
        }

        // 用于存储前9位一样的文件
        Map<String, File[]> fileMap = new HashMap<>();

        // 遍历源文件夹中的所有文件
        File sourceFolder = new File(sourceFolderPath);
        File[] files = sourceFolder.listFiles();

        if (files != null) {
            for (File file : files) {
                if (file.isFile() && file.getName().endsWith(".mp4")) {
                    String prefix = file.getName().substring(0, 9);  // 获取文件名前9位

                    // 将文件添加到对应的前9位组中
                    if (!fileMap.containsKey(prefix)) {
                        fileMap.put(prefix, new File[0]);
                    }
                    File[] existingFiles = fileMap.get(prefix);
                    File[] newFiles = new File[existingFiles.length + 1];
                    System.arraycopy(existingFiles, 0, newFiles, 0, existingFiles.length);
                    newFiles[existingFiles.length] = file;
                    fileMap.put(prefix, newFiles);
                }
            }

            // 复制文件到目标文件夹
            for (Map.Entry<String, File[]> entry : fileMap.entrySet()) {
                String prefix = entry.getKey();
                File[] filesToCopy = entry.getValue();

                if (filesToCopy.length > 0) {
                    // 使用文件中的一个文件名创建子文件夹
                    String folderName = filesToCopy[0].getName();  // 取第一个文件名
                    File subfolder = new File(destinationFolder, folderName);

                    // 创建子文件夹
                    if (!subfolder.exists()) {
                        subfolder.mkdirs();
                    }

                    // 复制文件到子文件夹
                    for (File file : filesToCopy) {
                        try {
                            Path srcPath = file.toPath();
                            Path destPath = Paths.get(subfolder.getPath(), file.getName());
                            Files.copy(srcPath, destPath);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }

        System.out.println("文件复制完成！");
    }
}
